/*
Copyright 2024 New Vector Ltd.
Copyright 2020, 2021 The Matrix.org Foundation C.I.C.
Copyright 2015, 2016 OpenMarket Ltd

SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/

$left-gutter: 64px;

.mx_EventTile {
    --EventTile_content-margin-inline-end: 34px;
    --EventTile_group_line-spacing-block-start: 1px;
    --EventTile_group_line-spacing-block-end: 3px;
    --EventTile_group_line-spacing-inline-start: $left-gutter;
    --EventTile_group_line-line-height: $font-22px;
    --EventTile_ThreadSummary-line-height: calc(2 * $font-12px);

    flex-shrink: 0;
    max-width: 100%;
    clear: both; /* TODO: check if this is necessary */
    padding-top: 18px;
    position: relative;

    &.mx_EventTile_info {
        font-size: var(--cpd-font-size-body-sm);
        color: $secondary-content;
    }

    .mx_EventTile_avatar {
        cursor: pointer;
        user-select: none;
    }

    .mx_EventTile_body {
        overflow-y: hidden;
        text-align: start;
    }

    .mx_EventTile_receiptSent,
    .mx_EventTile_receiptSending {
        position: relative;
        display: inline-block;
        width: 16px;
        height: 16px;

        &::before {
            background-color: var(--cpd-color-icon-tertiary);
            mask-repeat: no-repeat;
            mask-position: center;
            mask-size: 16px;
            width: 16px;
            height: 16px;
            content: "";
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
        }
    }

    .mx_EventTile_receiptSent::before {
        mask-image: url("@vector-im/compound-design-tokens/icons/check-circle.svg");
    }

    .mx_EventTile_receiptSending::before {
        mask-image: url("@vector-im/compound-design-tokens/icons/circle.svg");
    }

    .mx_EventTile_content {
        &.mx_EditMessageComposer,
        &.mx_EditWysiwygComposer {
            /* Make sure the formatting bar is visible */
            overflow: visible;
        }
    }

    .mx_EventTile_searchHighlight {
        background-color: $accent;
        color: $accent-fg-color;
        border-radius: 5px;
        padding-inline: 2px;
        cursor: pointer;

        a {
            background-color: $accent;
            color: $accent-fg-color;
        }
    }

    .mx_EventTileBubble {
        margin-block: var(--EventTileBubble_margin-block);
        min-width: 100px;
    }

    .mx_MImageBody {
        .mx_MImageBody_thumbnail_container {
            display: flex;
            align-items: center; /* on every layout */
        }
    }

    .mx_DisambiguatedProfile {
        color: $primary-content;
        font: var(--cpd-font-body-md-regular);
        display: inline-block;
        padding-bottom: 0px;
        padding-top: 0px;
    }

    .mx_ReactionsRow {
        display: flex;
        flex-flow: wrap;
        align-items: center;
        gap: $spacing-4;
    }

    .mx_ReplyChain--expanded {
        .mx_EventTile_body {
            /* !important needed to override .mx_ReplyTile .mx_EventTile_content .mx_EventTile_body */
            display: block !important;
            overflow-y: scroll;
        }

        .mx_EventTile_collapsedCodeBlock {
            /* !important needed due to .mx_ReplyTile .mx_EventTile_content .mx_EventTile_pre_container > pre */
            display: block !important;
        }
    }

    .mx_RoomView_searchResultsPanel & {
        &.mx_EventTile_contextual {
            opacity: 0.4;
        }
    }

    &.mx_EventTile_bubbleContainer {
        display: grid;
        grid-template-columns: 1fr 100px;

        .mx_EventTile_line {
            margin-right: 0;
            grid-column: 1 / 3;
            padding: 0 !important; /* override default padding of mx_EventTile_line so that we can be centered */
        }

        .mx_EventTile_msgOption {
            grid-column: 2;
        }

        &:hover {
            .mx_EventTile_line {
                /* To avoid bubble events being highlighted */
                background-color: inherit !important;
            }
        }
    }

    &.mx_EventTile_isEditing .mx_MessageTimestamp {
        visibility: hidden;
    }

    &[data-layout="irc"],
    &[data-layout="group"] {
        --selected-message-border-width: 4px;

        /* TODO: adjust the values for IRC layout */
        --EventTile-box-shadow-offset-x: calc(50px + var(--selected-message-border-width));
        --EventTile-box-shadow-spread-radius: -50px;
        .mx_EventTile_e2eIcon {
            position: absolute;
        }

        .mx_MImageBody {
            .mx_MImageBody_thumbnail_container {
                justify-content: flex-start;
                min-height: $font-44px;
                min-width: $font-44px;
            }
        }

        .mx_EventTile_line,
        .mx_EventTile_reply {
            position: relative;
            border-radius: 8px;
        }

        .mx_EventTile_reply {
            margin-right: 10px;
        }

        .mx_EventTile_msgOption {
            float: right;
            text-align: right;
            position: relative;
            width: 90px;

            /* Hack to stop the height of this pushing the messages apart.
               Replaces margin-top: -6px. This interacts better with a read
               marker being in between. Content overflows. */
            height: 1px;
        }

        &.mx_EventTile_highlight,
        &.mx_EventTile_highlight .markdown-body {
            .mx_EventTile_line {
                background-color: $event-highlight-bg-color;
            }
        }

        &:focus-visible:focus-within,
        &.mx_EventTile_actionBarFocused,
        &.mx_EventTile_isEditing,
        &.mx_EventTile_selected {
            .mx_EventTile_line {
                background-color: $event-selected-color;
            }
        }

        /* this is used for the tile for the event which is selected via the URL. */
        &.mx_EventTile_isEditing,
        &.mx_EventTile_selected {
            > .mx_EventTile_line {
                /* TODO: ultimately we probably want some transition on here. */
                box-shadow: inset var(--EventTile-box-shadow-offset-x) 0 0 var(--EventTile-box-shadow-spread-radius)
                    var(--cpd-color-bg-action-primary-rest);
            }
        }

        &.mx_EventTile_info {
            .mx_EventTile_e2eIcon {
                top: 0;
            }
        }

        &.mx_EventTile_continuation .mx_EventTile_line {
            clear: both;
        }

        &:hover {
            .mx_EventTile_line {
                background-color: $event-selected-color;
            }
        }
    }

    &[data-layout="bubble"],
    &[data-layout="group"] {
        .mx_EventTileBubble {
            margin-inline: auto;
        }

        .mx_ReplyChain {
            margin-bottom: $spacing-8;
        }
    }

    &[data-layout="irc"] {
        --EventTile_irc_line-padding-block: 1px;

        /* add --right-padding value of MessageTimestamp only */
        /* stylelint-disable-next-line declaration-colon-space-after */
        --EventTile_irc_line_info-margin-inline-start: calc(
            var(--name-width) + var(--icon-width) + 1 * var(--right-padding)
        );

        display: flex;
        align-items: flex-start;
        padding-top: 0;

        .mx_MessageTimestamp {
            min-width: var(--MessageTimestamp-width); /* ensure space for EventTile without timestamp */
            text-align: right;
        }

        > * {
            margin-right: var(--right-padding);
        }

        .mx_EventTile_avatar,
        .mx_EventTile_e2eIcon {
            height: var(--irc-line-height);
        }

        .mx_EventTile_avatar,
        .mx_DisambiguatedProfile,
        .mx_EventTile_e2eIcon,
        .mx_EventTile_msgOption {
            flex-shrink: 0;
        }

        .mx_EventTile_avatar {
            order: 1;
            position: relative;
            display: flex;
            align-items: center;

            /* Need to use important to override the js calculated values. */
            > .mx_BaseAvatar,
            > .mx_BaseAvatar > * {
                font-size: $font-10px !important;
                line-height: calc($font-15px - 2px) !important;
            }
        }

        .mx_DisambiguatedProfile {
            order: 2;
            width: var(--name-width);
            margin-inline-end: 0; /* override mx_EventTile > * */

            > .mx_DisambiguatedProfile_displayName {
                width: 100%;
                text-align: end;
                overflow: hidden;
                text-overflow: ellipsis;
            }

            > .mx_DisambiguatedProfile_mxid {
                visibility: collapse;
                margin-left: 0; /* Override the inherited margin. */
                padding: 0 5px;
            }

            &:hover {
                overflow: visible;
                z-index: 10;

                > .mx_DisambiguatedProfile_displayName {
                    overflow: visible;
                    display: inline;
                    background-color: $event-selected-color;
                    border-radius: 8px 0 0 8px;
                    padding-right: $spacing-8;
                }

                > .mx_DisambiguatedProfile_mxid {
                    visibility: visible;
                    opacity: 1;
                    background-color: $event-selected-color;
                }
            }
        }

        .mx_EventTile_e2eIcon {
            padding: 0;
            flex-grow: 0;
            background-position: center;
        }

        .mx_EventTile_line {
            .mx_EventTile_e2eIcon,
            .mx_TextualEvent,
            .mx_ViewSourceEvent,
            .mx_MTextBody {
                /* add a 1px padding top and bottom because our larger
                emoji font otherwise gets cropped by anti-zalgo */
                padding: var(--EventTile_irc_line-padding-block) 0;
            }

            .mx_EventTile_e2eIcon,
            .mx_TextualEvent,
            .mx_MTextBody {
                display: inline-block;
            }

            .mx_ReplyTile {
                .mx_MTextBody {
                    display: -webkit-box; /* Enable -webkit-line-clamp */
                }
            }
        }

        .mx_EventTile_line,
        .mx_EventTile_reply {
            order: 3;
            display: flex;
            flex-direction: column;
            flex-grow: 1;
            flex-shrink: 1;
            min-width: 0;
        }

        .mx_EventTile_reply {
            order: 4;
        }

        .mx_EventTile_msgOption {
            order: 5;

            .mx_ReadReceiptGroup {
                inset-block-start: -0.3rem; /* (var(--irc-line-height) - avatar height) / 2 */
            }
        }

        .mx_ReplyChain {
            margin: 0;
        }

        .mx_EditMessageComposer_buttons {
            position: relative;
        }

        .mx_EventTileBubble {
            position: relative;
            left: var(--EventTile_irc_line_info-margin-inline-start);

            &.mx_cryptoEvent {
                left: unset;
            }
        }

        .mx_ReplyTile .mx_EventTileBubble {
            left: unset; /* Cancel the value specified above for the tile inside ReplyTile */
        }

        &.mx_EventTile_isEditing > .mx_EventTile_line {
            .mx_EditMessageComposer {
                /* add space for the stroke on box-shadow */
                padding-inline-start: calc(
                    var(--selected-message-border-width) + var(--EditMessageComposer-padding-inline)
                );
            }
        }

        &.mx_EventTile_info {
            .mx_EventTile_avatar {
                left: var(--EventTile_irc_line_info-margin-inline-start);
                top: 0;
                margin-right: var(--right-padding);
                padding-block: var(--EventTile_irc_line-padding-block);
            }

            .mx_EventTile_line {
                margin-inline-start: var(--EventTile_irc_line_info-margin-inline-start);
            }

            .mx_ViewSourceEvent, /* For hidden events */
            .mx_TextualEvent {
                line-height: var(--irc-line-height);
            }
        }

        &.mx_EventTile_emote {
            .mx_EventTile_avatar {
                /* add --right-padding value of MessageTimestamp only */
                margin-left: calc(var(--name-width) + var(--icon-width) + 1 * var(--right-padding));
            }
        }

        .mx_EventTile_footer {
            margin: var(--cpd-space-1-5x) 0;
        }
    }

    &[data-layout="group"] {
        .mx_EventTile_avatar {
            top: 14px;
            left: $spacing-8;
        }

        .mx_EventTile_line,
        .mx_EventTile_reply {
            padding-top: var(--EventTile_group_line-spacing-block-start);
            padding-bottom: var(--EventTile_group_line-spacing-block-end);
            padding-left: var(--EventTile_group_line-spacing-inline-start);
            line-height: var(--EventTile_group_line-line-height);
        }

        .mx_EventTile_e2eIcon {
            inset: 0 0 0 44px;

            /* Keep height equal to text for alignment */
            height: var(--EventTile_group_line-line-height);
            margin: 1px;
        }

        .mx_EventTile_msgOption {
            margin-inline-end: 10px;

            .mx_ReadReceiptGroup {
                /* This aligns the avatar with the last line of the */
                /* message. We want to move it one line up */
                /* See .mx_EventTile[data-layout=group] .mx_EventTile_line in _EventTile.scss */
                inset-block-start: calc(-$font-22px - 3px);
            }
        }

        .mx_MessageTimestamp {
            position: absolute;
            left: 0;
            text-align: center;
        }

        .mx_ThreadSummary,
        .mx_ThreadSummary_icon {
            margin-left: $left-gutter;
        }

        .mx_EventTile_footer {
            margin: var(--cpd-space-1x) var(--cpd-space-16x);
        }

        > .mx_DisambiguatedProfile {
            line-height: $font-20px;
            margin-left: $left-gutter;
            max-width: calc(100% - $left-gutter);
        }

        > .mx_EventTile_avatar {
            position: absolute;
            z-index: 9;
        }

        .mx_RoomView_timeline_rr_enabled & {
            $inline-end-margin: 80px;

            .mx_ThreadSummary,
            .mx_ThreadSummary_icon,
            .mx_EventTile_line {
                margin-right: $inline-end-margin;
                min-height: $font-14px;
            }

            .mx_ThreadSummary {
                /* leave space on both left & right gutters */
                max-width: min(calc(100% - $left-gutter - $inline-end-margin), 600px);
            }

            /* on ELS we need the margin to allow interaction with the expand/collapse button */
            /* which is normally in the RR gutter */
        }

        &.mx_EventTile_continuation {
            padding-top: 0;
        }

        &.mx_EventTile_info {
            $spacing-block-start: 3px;
            $spacing-block-end: 2px;

            padding-top: 0;

            .mx_EventTile_avatar,
            .mx_EventTile_e2eIcon {
                line-height: 1;
                margin: $spacing-block-start 0 $spacing-block-end;
            }

            .mx_EventTile_avatar {
                top: initial;
                inset-inline-start: $left-gutter;
                height: 14px;
            }

            .mx_EventTile_line {
                padding-block: $spacing-block-start $spacing-block-end;
                /* 20px: avatar area */
                padding-inline-start: calc(var(--EventTile_group_line-spacing-inline-start) + 20px);

                .mx_MessageTimestamp {
                    top: 0;
                }
            }

            &.mx_EventTile_selected .mx_EventTile_line {
                /* TODO: check if this would be necessary; */
                padding-inline-start: calc(var(--EventTile_group_line-spacing-inline-start) + 20px);
            }
        }
    }

    &[data-layout="bubble"] {
        /* Other half of the gutter is provided by margin-bottom on the last tile
        of the section */
        margin-top: calc(var(--gutterSize) / 2);
        margin-left: var(--EventTile_bubble-margin-inline-start);

        /* Reset default values. TODO: remove */
        max-width: unset;
        padding-top: 0;

        .mx_EventTile_msgOption {
            .mx_ReadReceiptGroup {
                position: absolute;
                inset-block-start: auto;

                /* as close to right gutter without clipping as possible */
                inset-inline-end: calc(-1 * var(--ReadReceiptGroup_EventBubbleTile-spacing-end));

                /* (EventTileLine.line-height - ReadReceiptGroup.height) / 2 */
                /* this centers the ReadReceiptGroup if we’ve got a single line */
                inset-block-end: calc(($font-18px - 24px) / 2);
            }
        }
        .mx_EventTileBubble {
            /* Timestamps are inside the tile, so the width can be less constrained */
            max-width: 600px;
        }

        &.mx_EventTile_continuation {
            margin-top: 2px;
        }
        &.mx_EventTile_lastInSection {
            /* Other half of the gutter is provided by margin-top on the first
            tile of the section */
            margin-bottom: calc(var(--gutterSize) / 2);
        }
    }
}

.mx_GenericEventListSummary {
    &[data-layout="irc"],
    &[data-layout="group"] {
        .mx_EventTile_line .mx_RedactedBody {
            line-height: 1; /* remove spacing between lines */
        }
    }

    &[data-layout="irc"] {
        /* Apply only collapsed events block */
        > .mx_EventTile_line {
            /* add --right-padding value of MessageTimestamp and avatar only */
            /* stylelint-disable-next-line declaration-colon-space-after */
            padding-left: calc(
                var(--name-width) + var(--icon-width) + var(--MessageTimestamp-width) + 2 * var(--right-padding)
            );
        }
    }

    &[data-layout="group"] {
        .mx_EventTile_line {
            padding-left: $left-gutter;
        }

        .mx_GenericEventListSummary_unstyledList > .mx_EventTile_info .mx_EventTile_avatar ~ .mx_EventTile_line {
            /* override padding-left $left-gutter */
            padding-inline-start: calc(var(--EventTile_group_line-spacing-inline-start) + 20px);
        }
    }
}

.mx_EventTile_content {
    /*
    all the overflow-y: hidden; are to trap Zalgos -
    but they introduce an implicit overflow-x: auto.
    so make that explicitly hidden too to avoid random
    horizontal scrollbars occasionally appearing, like in
    https://github.com/vector-im/vector-web/issues/1154
    */
    overflow-y: hidden;
    overflow-x: hidden;
    margin-right: var(--EventTile_content-margin-inline-end);

    .mx_EventTile_edited,
    .mx_EventTile_pendingModeration {
        user-select: none;
        font-size: $font-12px;
        color: $secondary-content;
        display: inline-block;
        margin-inline-start: 9px;
    }

    .mx_EventTile_edited {
        cursor: pointer;
    }

    .markdown-body {
        font: var(--cpd-font-body-md-regular) !important;
        letter-spacing: var(--cpd-font-letter-spacing-body-md);
        font-family: inherit !important;
        white-space: normal !important;
        line-height: inherit !important;
        background-color: inherit;
        color: inherit; /* inherit the colour from the dark or light theme by default (but not for code blocks) */
        flex: 1;

        pre,
        code {
            font-family: $monospace-font-family !important;
            background-color: $system;
        }

        code:not(pre *) {
            background-color: $inlinecode-background-color;
            border: 1px solid $inlinecode-border-color;
            border-radius: 4px;
            /* The horizontal padding is added by github-markdown-css .markdown-body */
            padding: $spacing-2 0;
            /* Avoid inline code blocks to be sticked when on multiple lines */
            line-height: $font-22px;
            /* Avoid the border to be glued to the other words */
            margin-right: $spacing-2;
        }

        code {
            white-space: pre-wrap; /* don't collapse spaces in inline code blocks */
        }

        pre {
            /* have to use overlay rather than auto otherwise Linux and Windows */
            /* Chrome gets very confused about vertical spacing: */
            /* https://github.com/vector-im/vector-web/issues/754 */
            overflow-x: overlay;
            overflow-y: visible;

            &::-webkit-scrollbar-corner {
                background: transparent;
            }

            border: 1px solid $quinary-content;

            code {
                white-space: pre; /* we want code blocks to be scrollable and not wrap */

                > * {
                    display: inline;
                }
            }
        }

        h1,
        h2,
        h3,
        h4,
        h5,
        h6 {
            font-family: inherit !important;
            color: inherit;
        }

        /* Make h1 and h2 the same size as h3. */
        h1,
        h2 {
            font-size: 1.5em;
            border-bottom: none !important; /* override GFM */
        }

        a {
            color: $accent-alt;
        }

        blockquote {
            border-left: 2px solid $blockquote-bar-color;
            color: $secondary-content;
            border-radius: 2px;
            padding: 0 10px;
        }

        /*
        // actually, removing the Italic TTF provides
        // better results seemingly

        // compensate for Nunito italics being terrible
        // https://github.com/google/fonts/issues/1726
        em {
            transform: skewX(-14deg);
            display: inline-block;
        }
        */

        /* Override nested lists being lower-roman */
        ol ol,
        ul ol {
            list-style-type: revert;
        }

        /* Make list type disc to match rich text editor */
        ul {
            list-style-type: disc;
        }

        /* override styles from the base markdown CSS that put markdown content on its own line,
           as this isn't what we want for richtext emote content.
         */
        &::before {
            display: none;
        }

        &::after {
            display: none;
        }
    }
}

/* Spoiler stuff */
.mx_EventTile_spoiler {
    cursor: pointer;

    /* clear button styles */
    appearance: none;
    background: none;
    border: none;
    padding: 0;
    margin: 0;
    font-size: inherit;
    font-family: inherit;
    line-height: inherit;
    text-align: inherit;

    .mx_EventTile_spoiler_reason {
        color: $event-timestamp-color;
        font-size: $font-11px;
    }

    .mx_EventTile_spoiler_content {
        filter: blur(5px) saturate(0.1) sepia(1);
        transition-duration: 0.5s;
        pointer-events: none;
    }

    &.visible > .mx_EventTile_spoiler_content {
        filter: none;
        user-select: auto;
        pointer-events: auto;
    }
}

.mx_EventTile_bigEmoji {
    font-size: 48px;
    line-height: 57px;

    .mx_Emoji {
        font-size: inherit !important;
    }
}

.mx_EventTile_e2eIcon {
    position: relative;
    width: 14px;
    height: 14px;
    display: block;
    background-repeat: no-repeat;
    background-size: contain;

    &::before,
    &::after {
        content: "";
        display: block;
        position: absolute;
        inset: 0;
        mask-repeat: no-repeat;
        mask-position: center;
        mask-size: contain;
    }

    &::before {
        mask-size: 80%;
    }

    &.mx_EventTile_e2eIcon_warning::after {
        mask-image: url("@vector-im/compound-design-tokens/icons/error-solid.svg");
        background-color: $e2e-warning-color; /* red */
    }

    &.mx_EventTile_e2eIcon_normal::after {
        mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
        background-color: var(--cpd-color-icon-tertiary); /* grey */
    }

    &.mx_EventTile_e2eIcon_decryption_failure::after {
        mask-image: url("@vector-im/compound-design-tokens/icons/error-solid.svg");
        background-color: var(--cpd-color-icon-tertiary);
    }
}

.mx_EventTile_body {
    a:hover {
        text-decoration: underline;
    }

    pre {
        border: 1px solid transparent;

        .mx_EventTile:hover &,
        .mx_EventTile:focus-visible:focus-within & {
            border: 1px solid $tertiary-content;
        }
    }

    /* selector wrongly applies to pill avatars but those have explicit width/height passed at a higher specificity */
    &.markdown-body img {
        object-fit: contain;
        object-position: left top;

        /* Override the default colors of the 'github-markdown-css' library
        (#fff for light theme, #000 for dark theme) to match the inherited theme */
        background-color: inherit !important;
    }

    .mx_EventTile_clamp & {
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
    }

    .mx_EventTile_pre_container {
        /* For correct positioning of _copyButton (See TextualBody) */
        position: relative;

        &:focus-within,
        &:hover {
            .mx_EventTile_button {
                visibility: visible;
            }
        }

        .mx_EventTile_collapsedCodeBlock {
            max-height: 30vh;
            padding-top: $spacing-12;
            padding-bottom: $spacing-12;
        }

        /* Inserted adjacent to <pre> blocks, (See TextualBody) */
        .mx_EventTile_button {
            position: absolute;
            top: $spacing-8;
            right: $spacing-8;
            width: 19px;
            height: 19px;
            visibility: hidden;
            background-color: $message-action-bar-fg-color;

            &.mx_EventTile_buttonBottom {
                top: 33px;
            }

            &.mx_EventTile_collapseButton,
            &.mx_EventTile_expandButton {
                mask-size: 75%;
            }
        }

        .mx_EventTile_copyButton {
            height: 17px;
            mask-image: url($copy-button-url);
            mask-position: center center;
            mask-repeat: no-repeat;
            mask-size: contain;
            right: 9px;
            width: 17px;
        }
    }
}

.mx_EventTile_lineNumbers {
    float: left;
    margin: 0 0.5em 0 -1.5em;
    color: gray;

    & span {
        text-align: right;
        display: block;
        padding-left: 1em;
    }
}

.mx_EventTile_button {
    display: inline-block;
    cursor: pointer;
}

.mx_EventTile_collapseButton,
.mx_EventTile_expandButton {
    mask-position: center;
    mask-repeat: no-repeat;
}

.mx_EventTile_collapseButton {
    mask-image: url("@vector-im/compound-design-tokens/icons/collapse.svg");
}

.mx_EventTile_expandButton {
    mask-image: url("@vector-im/compound-design-tokens/icons/expand.svg");
}

.mx_EventTile_tileError {
    color: red;
    text-align: center;

    /* Remove some of the default tile padding so that the error is centered */
    margin-right: 0;

    .mx_EventTile_line {
        padding-left: 0;
        margin-right: 0;

        span {
            padding: $spacing-4 $spacing-8;
        }
    }

    a {
        margin-left: 1em;
    }
}

.mx_EventTile:hover .mx_MessageActionBar,
.mx_EventTile.mx_EventTile_actionBarFocused .mx_MessageActionBar,
[data-whatinput="keyboard"] .mx_EventTile:focus-within .mx_MessageActionBar,
.mx_EventTile:focus-visible:focus-within .mx_MessageActionBar {
    visibility: visible;
}

.mx_EventTile[data-shape="ThreadsList"],
.mx_EventTile[data-shape="Notification"] {
    --topOffset: $spacing-12;
    --leftOffset: 48px;
    $borderRadius: 8px;
    $padding: $spacing-8;
    $hrHeight: 1px;
    $notification-dot-size: 8px; /* notification dot next to the timestamp */

    margin: calc(var(--topOffset) + $hrHeight) 0 var(--topOffset); /* include the height of horizontal line */
    padding: $padding;
    border-radius: $borderRadius;

    display: flex;
    flex-flow: wrap;
    align-items: center;

    &::after,
    &::before {
        content: "";
        position: absolute;
    }

    &::after {
        $inset-block-start: auto;
        $inset-inline-end: calc(-1 * var(--cpd-space-2x));
        $inset-block-end: calc(-1 * var(--topOffset) - $hrHeight); /* exclude the height of horizontal line */
        $inset-inline-start: calc(var(--leftOffset) + $padding);
        inset: $inset-block-start $inset-inline-end $inset-block-end $inset-inline-start;

        height: $hrHeight;
        background-color: $quinary-content;
        pointer-events: none; /* disable the message action bar on hover */
    }

    &::before {
        inset: 0;
        pointer-events: none; /* ensures the title for the sender name can be correctly displayed */
    }

    &[data-notification="total"]::before {
        background-color: $room-icon-unread-color;
    }

    &[data-notification="highlight"]::before {
        background-color: $alert;
    }

    &:last-child {
        &::after {
            content: unset;
        }

        margin-bottom: 0;
    }

    &:first-child {
        margin-top: 0;
    }

    .mx_EventTile_avatar {
        inset: $padding auto auto $padding;
    }

    .mx_EventTile_details {
        overflow: hidden;
    }

    .mx_DisambiguatedProfile {
        display: inline-flex;
        align-items: center;
        flex: 1;

        .mx_DisambiguatedProfile_displayName,
        .mx_DisambiguatedProfile_mxid {
            display: block;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        .mx_DisambiguatedProfile_displayName {
            flex: none;
            max-width: 100%;
        }

        .mx_DisambiguatedProfile_mxid {
            flex: 1;
        }
    }

    .mx_EventTile_line {
        width: 100%;
        box-sizing: border-box;
        padding-bottom: 0;
        padding-inline-start: var(--leftOffset);
    }

    .mx_MessageTimestamp {
        font-size: $font-12px;
        width: unset; /* Cancel the default width */
        overflow: hidden; /* ensure correct overflow behavior */
        text-overflow: ellipsis;
        position: initial;
        margin-left: auto; /* to ensure it's end-aligned even if it's the only element of its parent */
    }

    &:hover {
        background-color: $panels;
    }

    /* ThreadsList has always group layout */
    &[data-layout="group"]:hover {
        .mx_EventTile_line {
            background-color: inherit;
            box-shadow: none; /* don't show the verification left stroke in the thread list */
        }
    }
}

.mx_EventTile[data-shape="ThreadsList"] {
    .mx_ThreadPanel_replies {
        margin-top: $spacing-8;
        display: flex;
        align-items: center;
        position: relative;
        font: var(--cpd-font-body-sm-regular);

        &::before {
            @mixin ThreadSummaryIcon;
        }

        .mx_ThreadPanel_replies_amount {
            @mixin ThreadRepliesAmount;
        }

        .mx_ThreadSummary_content {
            text-overflow: ellipsis;
            overflow: hidden;
            white-space: nowrap;
        }
    }
}

/* For style rules of ThreadView, see _ThreadPanel.pcss */
.mx_ThreadView {
    --ThreadView_group_spacing-start: 56px; /* 56px: 64px - 8px (padding) */
    --ThreadView_group_spacing-end: 8px; /* same as padding */

    .mx_EventTile {
        display: flex;
        flex-direction: column;

        .mx_EventTile_roomName {
            display: none;
        }

        /* handling for hidden events (e.g reactions) in the thread view */
        &.mx_EventTile_info {
            .mx_EventTile_avatar {
                position: absolute;
                /* Align with hidden event content */
                top: 50%;
                transform: translateY(-50%);
                margin-top: -2px;
                margin-bottom: 0;
            }

            &.mx_EventTile_selected .mx_EventTile_line,
            .mx_EventTile_line {
                $line-height: $font-12px;

                padding-inline-start: 0;
                line-height: $line-height;

                .mx_EventTile_content,
                .mx_RedactedBody {
                    width: auto;
                    font-size: $line-height;
                }
            }

            &[data-layout="irc"],
            &[data-layout="group"] {
                padding-top: 0;

                .mx_EventTile_avatar {
                    /* 14px: avatar width, 4px: align with text */
                    left: calc(var(--MessageTimestamp-width) + 14px - 4px);
                    z-index: 9; /* position above the hover styling */
                }

                .mx_MessageTimestamp {
                    top: 2px; /* Align with avatar */
                }

                &.mx_EventTile_selected .mx_EventTile_line,
                .mx_EventTile_line {
                    .mx_EventTile_content,
                    .mx_RedactedBody {
                        /* 14px: avatar width, 6px: 20px - 14px */
                        margin-inline-start: calc(14px + 6px);
                    }
                }
            }

            &[data-layout="bubble"] {
                .mx_EventTile_avatar {
                    inset-inline-start: 0;
                }

                &.mx_EventTile_selected .mx_EventTile_line,
                .mx_EventTile_line {
                    .mx_EventTile_content,
                    .mx_RedactedBody {
                        margin-inline-start: calc(var(--ThreadView_group_spacing-start) + 14px + 6px);
                    }
                }
            }
        }

        &[data-layout="irc"],
        &[data-layout="group"] {
            padding-block-start: $spacing-16;

            .mx_EventTile_line,
            .mx_EventTile_footer {
                margin-inline-end: var(--ThreadView_group_spacing-end);
            }

            .mx_EventTile_line {
                padding-block: var(--BaseCard_EventTile_line-padding-block);

                /* Add padding to align message text with summary text */
                /* See: .mx_EventTile[data-layout="group"] .mx_EventTile_line */
                padding-inline-start: var(--ThreadView_group_spacing-start);

                .mx_EventTile_content {
                    &.mx_EditMessageComposer {
                        padding-inline-start: 0; /* align start of first letter with that of the event body */
                    }
                }
            }

            .mx_EventTile_footer {
                /* Align with message text and summary text */
                margin-inline-start: var(--ThreadView_group_spacing-start);
            }

            &.mx_EventTile_continuation {
                padding-block-start: 0; /* Cancel padding-block-start */
            }
        }

        &[data-layout="group"] {
            width: 100%;

            .mx_EventTile_senderDetails {
                display: flex;
                align-items: center;
                gap: $spacing-16; /* gap between the avatar and the sender ID */
                padding-inline-start: $spacing-8;

                a {
                    flex: 1;
                    min-width: unset;
                    max-width: 100%;
                    display: flex;
                    align-items: center;

                    .mx_DisambiguatedProfile {
                        margin-left: 8px;
                        flex: 1;
                    }
                }
            }

            .mx_MessageTimestamp {
                position: absolute; /* for IRC layout */
                top: 2px; /* Align with mx_EventTile_content */
            }
        }

        &[data-layout="bubble"] {
            margin-inline: var(--BaseCard_EventTile-spacing-inline);

            &::before {
                inset-inline: calc(-1 * var(--BaseCard_EventTile-spacing-inline));
                z-index: auto; /* enable background color on hover */
            }

            .mx_ReactionsRow {
                position: relative; /* display on hover */
            }

            .mx_EventTile_line.mx_EventTile_mediaLine {
                padding-block: 0;
                padding-inline-start: 0;
                max-width: var(--EventBubbleTile_line-max-width);
            }

            &[data-self="true"] {
                align-items: flex-end;

                .mx_EventTile_line.mx_EventTile_mediaLine {
                    margin: 0 var(--EventTile_bubble_line-margin-inline-end) 0 0; /* align with normal messages */
                }
            }
        }
    }

    .mx_GenericEventListSummary {
        &[data-layout="irc"],
        &[data-layout="group"] {
            > .mx_EventTile_line {
                padding-inline-start: var(--ThreadView_group_spacing-start); /* align summary text with message text */
                padding-inline-end: var(--ThreadView_group_spacing-end); /* align summary text with message text */
            }
        }
    }
}

/* Cascading - compact modern layout on the main timeline and the right panel */
.mx_MatrixChat_useCompactLayout {
    .mx_EventTile[data-layout="group"] {
        --MatrixChat_useCompactLayout_group-padding-top: $spacing-4;
        --MatrixChat_useCompactLayout-top-avatar: 2px;
        --MatrixChat_useCompactLayout_line-spacing-block: 0px;

        padding-top: var(--MatrixChat_useCompactLayout_group-padding-top);

        .mx_EventTile_line,
        .mx_EventTile_reply {
            padding-block: var(--MatrixChat_useCompactLayout_line-spacing-block);
        }

        .mx_ReplyChain {
            margin-bottom: $spacing-4;
        }

        &.mx_EventTile_info {
            padding-top: 0; /* same as the padding for non-compact .mx_EventTile.mx_EventTile_info */
            font-size: $font-13px;

            .mx_EventTile_e2eIcon,
            .mx_EventTile_avatar {
                top: 0;
                margin-block: var(--MatrixChat_useCompactLayout_line-spacing-block);
            }

            .mx_EventTile_line,
            .mx_EventTile_reply {
                line-height: $font-20px;
            }
        }

        &.mx_EventTile_emote {
            padding-top: $spacing-8; /* add a bit more space for emotes so that avatars don't collide */

            .mx_EventTile_avatar {
                top: var(--MatrixChat_useCompactLayout-top-avatar);
            }

            .mx_EventTile_line,
            .mx_EventTile_reply {
                padding-bottom: 1px;
            }

            &.mx_EventTile_continuation {
                .mx_EventTile_line,
                .mx_EventTile_reply {
                    padding-bottom: var(--MatrixChat_useCompactLayout_line-spacing-block);
                }
            }
        }

        /* Cascading - apply zero padding to every element including mx_EventTile_emote */
        &.mx_EventTile_continuation {
            padding-top: var(--MatrixChat_useCompactLayout_line-spacing-block);
        }

        .mx_EventTile_avatar {
            top: var(--MatrixChat_useCompactLayout-top-avatar);
        }

        .mx_EventTile_e2eIcon {
            margin: 0px;
        }

        .mx_DisambiguatedProfile {
            font-size: $font-13px;
        }

        .mx_EventTile_msgOption {
            .mx_ReadReceiptGroup {
                /* This aligns the avatar with the last line of the */
                /* message. We want to move it one line up - 2rem */
                inset-block-start: -2rem;
            }
        }

        .mx_EventTile_content .markdown-body {
            p,
            ul,
            ol,
            dl,
            blockquote,
            pre,
            table {
                margin-bottom: $spacing-4; /* 1/4 of the non-compact margin-bottom */
            }
        }
    }
}

.mx_EventTile_details {
    display: flex;
    width: stretch;
    align-items: center;
    justify-content: space-between;
    gap: $spacing-8;
    margin-left: var(--leftOffset);
    .mx_EventTile_truncated {
        flex: 1;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
}

.mx_EventTile_annotated {
    display: flex;
}

.mx_EventTile_footer {
    display: flex;
    gap: var(--cpd-space-2x);
    align-items: center;
}

/* Media query for mobile UI */
@media only screen and (max-width: 480px) {
    .mx_EventTile_content {
        margin-right: 0;
    }
}
